package com.chaos.eurekaproducer.test;

/**
 * @author liaopeng
 * @title: StaticTest
 * @projectName eureka-producer
 * @description: TODO
 * @date 2021/9/8上午11:32
 */
/**
 * 超类
 */
public class A {

    public static String staticStr = "A静态属性";
    public String nonStaticStr = "A非静态属性";

    public static void staticMethod() {
        System.out.println("A静态方法");
    }

    public void nonStaticMethod() {
        System.out.println("A非静态方法");
    }
}

/**
 * 子类B 改写静态属性和函数
 */
class B extends A {

    public static String staticStr = "B改写后的静态属性";
    public String nonStaticStr = "B改写后的非静态属性";

    public static void staticMethod() {
        System.out.println("B改写后的静态方法");
    }
}


/**
 * 子类C继承A中的所有属性和方法
 */
class C extends A {

}


/**
 * 测试 静态属性函数的继承多态
 */
class StaticExtendsTest {

    public static void main(String[] args) {

        // C extends A
        C c = new C();
        System.out.println(c.nonStaticStr);
        System.out.println(c.staticStr);
        c.staticMethod();
        //输出的结果都是父类中的非静态属性、静态属性和静态方法,推出静态属性和静态方法可以被继承
        System.out.println("-------------------------------");

        A c1 = new C();
        System.out.println(c1.nonStaticStr);
        System.out.println(c1.staticStr);
        c1.staticMethod();
        //结果同上，输出的结果都是父类中的非静态属性、静态属性和静态方法,推出静态属性和静态方法可以被继承
        System.out.println("-------------------------------");

        // B extends A
        B b = new B();
        System.out.println(b.nonStaticStr);
        System.out.println(b.staticStr);
        b.staticMethod();
        // 结果都是B的属性 可以重写
        System.out.println("-------------------------------");

        A b1 = new B();
        System.out.println(b1.nonStaticStr);
        System.out.println(b1.staticStr);
        b1.staticMethod();
        //结果都是父类的静态方法，说明静态方法不可以被重写，不能实现多态
    }


}



